package utils;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

/*
    连接Connection对象管理工具类
 */
public class ConnectionManager {
    /*
        借助ThreadLocal实现线程中局部变量的数据共享
     */
    private static ThreadLocal<Connection> tl = new ThreadLocal<>();

    private ConnectionManager(){

    }
    /*
        定义静态方法,获取连接对象
        此方法,保证在同一个线程中获取到的是同一个Connection连接对象
     */
    public static Connection getConnection() throws SQLException {
        //首先从ThreadLocal对象中获取Connection对象，tl.get()根据当前的线程获取线程对象
        Connection con = tl.get();
        //判断con是否为null
        if(con==null) {
            /*System.out.println("212121");*/
            //获取一个连接对象
            con = C3P0Util.getConnection();
            //绑定到ThreadLocal中,设定值
            tl.set(con);
        }

        return con;
    }
    /*
        定义开启事务的方法
     */
    public static void setAutoCommit() throws SQLException {
        Connection con = getConnection();
        con.setAutoCommit(false);
    }
    /*
        定义提交事务的方法
     */
    public static void commit() throws SQLException {
        Connection con = getConnection();
        con.commit();
    }
    /*
        定义回滚事务的方法
     */
    public static void rollback() throws SQLException {
        Connection con = getConnection();
        con.rollback();
        //从ThreadLocal对象中移除
        tl.remove();
    }
}
